package controllers

import (
	"github.com/gin-gonic/gin"
	"hysx/models"
	"hysx/services"
	"net/http"
	"strconv"
)

type {{.StructName}}Controller struct {
	Service *services.{{.StructName}}Service
}

func New{{.StructName}}Controller(service *services.{{.StructName}}Service) *{{.StructName}}Controller {
	return &{{.StructName}}Controller{Service: service}
}

// Add{{.StructName}}Handler 添加{{.TableComment}}的处理器
// @Summary 添加{{.TableComment}}
// @Description 添加{{.TableComment}}
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}} [post]
func (controller *{{.StructName}}Controller) Add{{.StructName}}Handler(c *gin.Context) {
	var {{.TabName}} models.{{.StructName}}
	shouldBinding(c, &{{.TabName}})
	controller.Service.Add{{.StructName}}(c, &{{.TabName}})
	c.JSON(http.StatusOK, successMsg("添加{{.TableComment}}成功！"))
}

// Remove{{.StructName}}Handler 删除{{.TableComment}}的处理器
// @Summary 删除{{.TableComment}}
// @Description 删除{{.TableComment}}
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}}/:id [delete]
func (controller *{{.StructName}}Controller) Remove{{.StructName}}Handler(c *gin.Context) {
	id, err := strconv.Atoi(c.Param("id"))
	if err != nil {
		panic("参数不合法！")
	}
	controller.Service.Remove{{.StructName}}(c, &id)
	c.JSON(http.StatusOK, successMsg("删除{{.TableComment}}成功！"))
}

// Modify{{.StructName}}Handler 修改{{.TableComment}}的处理器
// @Summary 修改{{.TableComment}}
// @Description 修改{{.TableComment}}
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}} [put]
func (controller *{{.StructName}}Controller) Modify{{.StructName}}Handler(c *gin.Context) {
	var {{.TabName}} models.{{.StructName}}
	shouldBinding(c, &{{.TabName}})
	controller.Service.Modify{{.StructName}}(c, &{{.TabName}})
	c.JSON(http.StatusOK, successMsg("修改{{.TableComment}}成功"))
}

// Get{{.StructName}}ByIdHandler 通过ID查找{{.TableComment}}的处理器
// @Summary 通过ID查找{{.TableComment}}的处理器
// @Description 通过ID查找{{.TableComment}}的处理器
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}}/:id [get]
func (controller *{{.StructName}}Controller) Get{{.StructName}}ByIdHandler(c *gin.Context) {
	id, err := strconv.Atoi(c.Param("id"))
	if err != nil {
		panic("参数不合法！")
	}
	{{.TabName}} := controller.Service.Get{{.StructName}}ById(c, &id)
	c.JSON(http.StatusOK, successData({{.TabName}}))
}

// Get{{.StructName}}ListHandler 获取所有{{.TableComment}}的处理器
// @Summary 获取所有{{.TableComment}}列表
// @Description 获取所有{{.TableComment}}列表信息
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}} [get]
func (controller *{{.StructName}}Controller) Get{{.StructName}}ListHandler(c *gin.Context) {
	var {{.TabName}} models.{{.StructName}}
	shouldBinding(c, &{{.TabName}})
	pageNum, pageSize := getPageParams(c)
	pageInfo := controller.Service.Get{{.StructName}}List(c, &{{.TabName}}, pageSize, pageNum)
	c.JSON(http.StatusOK, successData(pageInfo))
}

// Export{{.StructName}}Handler 导出{{.TableComment}}的处理器
// @Summary 导出{{.TableComment}}的处理器
// @Description 导出{{.TableComment}}的处理器
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}}/export [get]
func (controller *{{.StructName}}Controller) Export{{.StructName}}Handler(c *gin.Context) {
	ids, ok := c.GetQueryArray("ids")
	if !ok {
		panic("非法参数！")
	}
	excel := controller.Service.Export{{.StructName}}(c, ids)
	buffer, err := excel.WriteToBuffer()
	if err != nil {
		panic("excel导出失败！" + err.Error())
	}
	downloadHead(c, "{{.TableComment}}数据.xlsx")
	_, err = c.Writer.Write(buffer.Bytes())
	if err != nil {
		panic("excel导出失败！" + err.Error())
	}
}

// DownloadImportTemplate 导出{{.TableComment}}的处理器
// @Summary 导出{{.TableComment}}的处理器
// @Description 导出{{.TableComment}}的处理器
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}}/downloadTempl[get]
func (controller *{{.StructName}}Controller) DownloadImportTemplate(c *gin.Context) {
	excel := controller.Service.DownloadImportTemplate()
	buffer, err := excel.WriteToBuffer()
	if err != nil {
		panic("excel模板生成失败！" + err.Error())
	}
	downloadHead(c, "{{.TableComment}}数据.xlsx")
	_, err = c.Writer.Write(buffer.Bytes())
	if err != nil {
		panic("excel模板生成失败！" + err.Error())
	}
}

// Import{{.StructName}}Handler 导入{{.TableComment}}的处理器
// @Summary 导入{{.TableComment}}的处理器
// @Description 导入{{.TableComment}}的处理器
// @Tags {{.TableComment}}管理
// @Produce json
// @Success 200 {object} Result
// @Router /{{.TabName}}/import [post]
func (controller *{{.StructName}}Controller) Import{{.StructName}}Handler(c *gin.Context) {
	file, err := c.FormFile("file")
	if err != nil {
		panic("上传导入文件失败！" + err.Error())
	}
	controller.Service.Import{{.StructName}}(c, file)
	c.JSON(http.StatusOK, successMsg("导入成功，后台处理中..."))
}
